Embodiments of this invention generally pertain to systems and methods for encoding and decoding user data for communication and/or storage applications to enhance error detection and possibly correction of the data.
Defects in a storage media, or errors in the reading and writing of data from a storage media, may result in data errors. Similarly, transmission of data through a transmission channel may result in errors, because of noise in the transmission channel. However, digital communication and storage systems need to perform accurately and reliably in the presence of these defects and errors. One effective and economical way to achieve this goal is through the use of forward error-correction (FEC) coding. Generally speaking, FEC coding is a type of digital signal processing that improves data reliability by introducing a known constraint into a data sequence prior to transmission or storage. This constraint enables a receiving system to detect and possibly correct errors caused by corruption from the channel and the receiver without requesting retransmission of the original information. In a digital system that employs FEC coding, a digital information source sends a data sequence to an encoder. The encoder inserts “redundant” (or parity) bits, thereby outputting a longer sequence of code bits, called a codeword. Such codewords can then be transmitted to a receiver, which uses a suitable decoder to extract the original data sequence. The decoder generally decodes the data, generates an error polynomial, and uses the error polynomial to determine corrections to the data.
In order to improve data transmission reliability, an FEC coding scheme may include two or more codes having different abilities to correct different types of errors in the data. For example, errors may be randomly distributed in a data set, or the errors may be burst errors, in which case they are grouped together. In magnetic recording, for example, a common FEC coding architecture may include a Reed-Solomon (RS) code designed to correct burst errors in the data and another code, such as, for example, a parity check code to correct randomly distributed bit errors in the data. The number and type of errors that can be corrected by the RS code depends on the characteristics of the code. For example, a Reed-Solomon code that takes k data symbols and adds parity symbols to make an n-symbol codeword including n−k parity symbols can typically correct up to t symbol errors, where 2t=n−k. Thus, the RS code requires two redundancy symbols to correct each symbol error. In order to increase the error correcting capabilities of the RS code, the number of redundant symbols must be increased. The use of additional redundant symbols, however, decreases both the effective bandwidth of a transmission system and the effective storage capacity of a storage system. Moreover, the use of additional redundant symbols increases the amount of processing performed by both the transmitting unit and the receiving unit to create or interpret the redundant symbols.
There is therefore a continued interest in developing effective techniques for reducing the number of errors, and in particular, the number of symbol errors presented at the front end of a decoder, such as an RS decoder.